package	juego.movil.aeronave;


import juego.tipos.*;
import juego.tipos.Vector;
import juego.arma.*;
import java.util.*;
import juego.Cielo;
import juego.movil.ObjetoMovil;
import juego.tipos.clasificacion.*;
import juego.Constantes;

public class Algo42 extends AvionDeCombate{
	private int vidas;
	
	public Algo42(Posicion posicionInicial, int cantidadDeVidas){
		posicion.set(posicionInicial);
		vidas = cantidadDeVidas;		
	}
	
	public int getVidas(){
		return vidas;
	}

	public void setVidas(int cantidadDeVidas){
		vidas = cantidadDeVidas;
	}
	
	public Clasificacion getClasificacion(){
		return new ClasificacionAliado();
	}

	
	public Clasificacion getClasificacionAtaque(){
		return new ClasificacionAtaqueAliado();
	}

	/*MGP: Provisorio, por ahi conviene ponerlo en una clase superior asi todos los aviones
	lo tienen por ejemplo. Pero este es indispensable pues el juego lo consultara para saber si
	termina.*/
	public boolean vivo(){
		if(vidas>0){
			return true;
		}else{
			return false;
		}
	}

	public void chocar(ObjetoMovil otroObjeto){
	//Enfrenta el avion del jugador contra otro objeto. Si se detruye y no le quedan mas vidas, se elimina del cielo. 		//Sino, se reinicia a su version base, con una vida menos.
	
	//(self==objeto)ifTrue:[UnObjetoNoPuedeChocarConSigoMismoException new signal.].
		poder.enfrentar(otroObjeto.getPoder());
		if(poder.agotado()){
			vidas= vidas -1;
			if(vidas < 0){
				//cielo quitar: self]
			}else{
				poder = new Poder(100);
				armas = new LinkedList<Arma>();
			//	armas.add(Laser);
			}
		}
	}

	public void mover(String direccion){
		
	}

	public AvionDeCombate getEnemigoMasCercano(){
	//Devuelve un AvionDeCombate que pueda ser atacado por el jugador.
		ClasificacionAtaqueAliado ataque = new ClasificacionAtaqueAliado();
		Cielo cielo = Cielo.getInstancia();
		List objetosCercanos = cielo.getListaElementos();
		Iterator i = objetosCercanos.iterator();
		AvionDeCombate enemigo = null;
		ObjetoMovil aux;
		while(i.hasNext()){
			aux = (ObjetoMovil)i.next();
			if(ataque.enfrentaA(aux.getClasificacion())){//Solo van a quedar los que pueden ser atacados.
						
				if((enemigo == null)||(this.dist(enemigo) > this.dist(aux))){
				//Se asegura de que sea el mas cercano.
					enemigo =(AvionDeCombate) aux;
				}
			}
		}
		return enemigo;
	}
	
	public Posicion getPosicionEnemigo(){
		Posicion aux =this.getPosicion();
		aux.transladar(Constantes.arriba());
		return aux;
	}
	
	public ObjetoMovil copiar(){
		return this;
	}
}


